package com.qz.sort;

import javax.xml.crypto.Data;
import javax.xml.stream.FactoryConfigurationError;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

/**
 * @Description 冒泡排序  按照从小到大的顺序
 * @Author Flag
 * @Date: 2021/7/26 17:56
 * @Version: 1.0
 **/
public class BubbleSortDome {
    public static void main(String[] args) {
        int arr[] = {3,9,-1,10,-2};
//        int arr[] = {1,2,3,4,5};
        int[] ints = bubbleSort8(arr);
        for (int anInt : ints) {

            System.out.print(anInt+" ");
        }

//        //测试冒泡排序的速度
//        int [] arr = new int [80000];
//        for (int i = 0; i < 80000; i++) {
//            arr[i] = (int)(Math.random() * 80000000);
//        }
//
//        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//        Date date1 = new Date();
//        String format1 = simpleDateFormat.format(date1);
//        System.out.println(format1);
//        bubbleSort(arr);
//        Date date2 = new Date();
//        String format2 = simpleDateFormat.format(date2);
//        System.out.println(format2);

    }

    public static int[] bubbleSort(int[] arr){
        //临时变量,用来交换数据
        int temp;
        //定义一个变量，用来作为提前结束的标志
        boolean flag;
        //定义外层循环,用来控制内层循环比较的范围，总是比上一次少1
        for (int i = 0; i < arr.length-1; i++){
            //初始化这个标志
            flag = false;

            //定义内层循环，用于比较
            for (int j = 0; j < arr.length - i - 1; j++) {

                if(arr[j] > arr[j+1]){
                    flag = true;
                    temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
            if(flag == false){
                break;
            }
        }
        return arr;
    }

    public static int[] bubbleSort2(int[] array){
        int temp = 0;
        boolean flag = false;
        for (int i = 0; i < array.length -1; i++) {
            for (int j = 0; j < array.length - 1 -i; j++) {
                if(array[j] > array[j+1]){
                    flag = true;
                    temp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = temp;
                }
            }

            if(!flag){
                System.out.println(i);
                break;
            }

        }

        return array;
    }


    /**
     * 冒泡排序，从小到大
     * @param array
     * @return
     */
    public static int[] bubbleSort3(int[] array){
        int temp;
        boolean flag = false;
        for (int i = 0; i < array.length -1 ; i++) {
            flag = false;
            for (int j = i; j < array.length - 1 - i; j++) {
                if(array[j] > array[j+1]) {
                    flag = true;
                    temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                }
            }
            if(!flag){
                break;
            }
        }
        return array;
    }


    /**
     * 从小到大
     * @param array
     * @return
     */
    public static int[] bubbleSort4(int[] array){

        int temp = 0;
        boolean flag = false;
        for (int i = 0; i < array.length - 1 ; i++) {
            for (int j = 0; j < array.length - 1 - i; j++) {
                if(array[j] > array[j+1]){
                    flag = true;
                    temp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = temp;
                }
            }
            if(!flag){
                break;
            }

        }
        return array;
    }

    /**
     * 从小导大
     * @param array
     * @return
     */
    public static int[] bubbleSort5(int[] array){

        int temp;
        boolean flag =false;
        for (int i = 0; i < array.length - 1 ; i++) {
            for (int j = 0; j < array.length - i -1 ; j++) {
                if(array[j] >array[j+1]){
                    flag = true;
                    temp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = temp;
                }
            }
            if(!flag){
               break;
            }

        }
        return array;
    }


    /**
     * 冒泡排序，从小到大
     * 设计思路。从头到位遍历，如果前面的大于后面的，就交换位置，
     * 直到找到最大的，将这个值放到最后，然后继续遍历，这时遍历到倒数第二个即可
     * @param array
     * @return
     */
    public static int[] bubbleSort6(int[] array){
        /**
         * 第一次
         */
//        int temp ;
//        for (int j = 0; j < array.length -1 ; j++) {
//            if(array[j]> array[j+1]){
//                temp=array[j];
//                array[j]= array[j+1];
//                array[j+1] = temp;
//            }
//        }


        /**
         * 总体
         */

        int temp;
        boolean flag = false;
        for (int i = 0; i < array.length - 1; i++) {
            for (int j = 0; j < array.length -1 - i; j++) {
                if(array[j]> array[j+1]){
                    flag = true;
                    temp=array[j];
                    array[j]= array[j+1];
                    array[j+1] = temp;
                }
            }
            if(!flag){
                break;
            }
        }

        return array;
    }


    /**
     * 从小到大
     * @param array
     * @return
     */
    public static int[] bubbleSort7(int[] array){
        //第一组冒泡
        int temp = 0;
        boolean flag = false;
        for (int i = 0; i < array.length-1; i++) {
            for (int j = 0; j < array.length -1 -i; j++) {
                if(array[j] > array[j+1]){
                    flag = true;
                    temp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = temp;

                }

            }
            if(!flag){
                break;
            }

        }

        return array;
    }




    public static int[] bubbleSort8(int[] array){

        //第一次排序

        boolean flag = false;
        int temp = 0;
        for (int j = 0; j < array.length - 1; j++) {
            flag = false;
            for (int i = 0; i < array.length-1 -j; i++) {
                if(array[i] > array[i+1]){
                    flag = true;
                    temp = array[i];
                    array[i] = array[i+1];
                    array[i+1] = temp;
                }

            }
            if(!flag){
                 break;
            }
        }

















        return array;
    }
}
